bitkeeper revision 1.1159.1.166 (41515bbcO3i2KEUTPMBadmjOSG5Sfw)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Wed, 22 Sep 2004 11:02:20 +0000 (11:02 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Wed, 22 Sep 2004 11:02:20 +0000 (11:02 +0000)
Add some restart events and make migrate/save events consistent
with other domain events.

tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendMigrate.py

index 8aa33484f1f22003eafba989959e8e1889e6969f..58b17d2933f76bf3a4972a1337d9890fcb6688a8 100644 (file)
@@ -203,7 +203,7 @@ class XendDomain:
         if info.name:
             self.domain_by_name[info.name] = info
         self.sync_domain(info.id)
-        if notify: eserver.inject('xend.domain.created', [info.name, info.id])
+        if notify: eserver.inject('xend.domain.create', [info.name, info.id])
 
     def _delete_domain(self, id, notify=1):
         """Remove a domain from the tables.
@@ -374,6 +374,8 @@ class XendDomain:
             self._add_domain(dominfo)
             return dominfo
         log.info("Restarting domain: id=%s name=%s", dominfo.id, dominfo.name)
+        eserver.inject("xend.domain.restart",
+                       [dominfo.name, dominfo.id, "begin"])
         deferred = dominfo.restart()
         deferred.addCallback(cbok)
         return deferred        
@@ -502,6 +504,8 @@ class XendDomain:
         self.restarts_by_name[dominfo.name] = dominfo
         self.restarts_by_id[dominfo.id] = dominfo
         log.info('Scheduling restart for domain: name=%s id=%s', dominfo.name, dominfo.id)
+        eserver.inject("xend.domain.restart",
+                       [dominfo.name, dominfo.id, "schedule"])
         self.domain_restarts_schedule()
             
     def domain_restart_cancel(self, id):
@@ -512,6 +516,8 @@ class XendDomain:
         dominfo = self.restarts_by_id.get(id) or self.restarts_by_name.get(id)
         if dominfo:
             log.info('Cancelling restart for domain: name=%s id=%s', dominfo.name, dominfo.id)
+            eserver.inject("xend.domain.restart",
+                           [dominfo.name, dominfo.id, "cancel"])
             dominfo.restart_cancel()
             del self.restarts_by_id[dominfo.id]
             del self.restarts_by_name[dominfo.name]
@@ -530,16 +536,23 @@ class XendDomain:
             try:
                 def cbok(dominfo):
                     log.info('Restarted domain name=%s id=%s', dominfo.name, dominfo.id)
+                    eserver.inject("xend.domain.restart",
+                                   [dominfo.name, dominfo.id, "success"])
                     self.domain_unpause(dominfo.id)
                 def cberr(err):
                     log.exception("Delayed exception restarting domain: name=%s id=%s",
                                   dominfo.name, dominfo.id)
+                    eserver.inject("xend.domain.restart",
+                                   [dominfo.name, dominfo.id, "fail"])
+                    
                 deferred = self.domain_restart(dominfo)
                 deferred.addCallback(cbok)
                 deferred.addErrback(cberr)
             except:
                 log.exception("Exception restarting domain: name=%s id=%s",
                               dominfo.name, dominfo.id)
+                eserver.inject("xend.domain.restart",
+                               [dominfo.name, dominfo.id, "fail"])
         if self.domain_restarts_exist():
             # Run again later if any restarts remain.
             self.refresh_schedule(delay=5)
@@ -587,7 +600,7 @@ class XendDomain:
         # Don't forget to cancel restart for it.
         dominfo = self.domain_lookup(id)
         xmigrate = XendMigrate.instance()
-        val = xmigrate.migrate_begin(dominfo.id, dst, live=live)
+        val = xmigrate.migrate_begin(dominfo, dst, live=live)
         return val
 
     def domain_save(self, id, dst, progress=0):
@@ -600,7 +613,7 @@ class XendDomain:
         """
         dominfo = self.domain_lookup(id)
         xmigrate = XendMigrate.instance()
-        return xmigrate.save_begin(dominfo.id, dst)
+        return xmigrate.save_begin(dominfo, dst)
     
     def domain_pincpu(self, id, cpu):
         """Pin a domain to a cpu.
index af99393f852bc324981c4974e5f7e7b9d06cea38..36929c8b15129066d367b1bbac93230f0a0b7fc0 100644 (file)
@@ -260,12 +260,13 @@ class XendMigrateInfo(XfrdInfo):
     """Representation of a migrate in-progress and its interaction with xfrd.
     """
 
-    def __init__(self, xid, dom, host, port, live):
+    def __init__(self, xid, dominfo, host, port, live):
         XfrdInfo.__init__(self)
         self.xid = xid
+        self.dominfo = dominfo
         self.state = 'begin'
         self.src_host = socket.gethostname()
-        self.src_dom = dom
+        self.src_dom = dominfo.id
         self.dst_host = host
         self.dst_port = port
         self.dst_dom = None
@@ -291,7 +292,9 @@ class XendMigrateInfo(XfrdInfo):
             xfrd.loseConnection()
             return
         log.info('Migrate BEGIN: ' + str(self.sxpr()))
-        eserver.inject('xend.migrate.begin', self.sxpr())
+        eserver.inject('xend.domain.migrate',
+                       [ self.dominfo.name, self.dominfo.id,
+                         "begin", self.sxpr() ])
         xfrd.request(['xfr.migrate',
                       self.src_dom,
                       vmconfig,
@@ -312,22 +315,24 @@ class XendMigrateInfo(XfrdInfo):
         XfrdInfo.connectionLost(self, reason)
         if self.state =='ok':
             log.info('Migrate OK: ' + str(self.sxpr()))
-            eserver.inject('xend.migrate.ok', self.sxpr())
         else:
             self.state = 'error'
             self.error(XendError("migrate failed"))
             log.info('Migrate ERROR: ' + str(self.sxpr()))
-            eserver.inject('xend.migrate.error', self.sxpr())
+        eserver.inject('xend.domain.migrate',
+                       [ self.dominfo.name, self.dominfo.id,
+                         self.state, self.sxpr() ])
 
 class XendSaveInfo(XfrdInfo):
     """Representation of a save in-progress and its interaction with xfrd.
     """
     
-    def __init__(self, xid, dom, file):
+    def __init__(self, xid, dominfo, file):
         XfrdInfo.__init__(self)
         self.xid = xid
+        self.dominfo = dominfo
         self.state = 'begin'
-        self.src_dom = dom
+        self.src_dom = dominfo.id
         self.file = file
         self.start = 0
         
@@ -347,7 +352,9 @@ class XendSaveInfo(XfrdInfo):
             return
         print '***request> begin'
         log.info('Save BEGIN: ' + str(self.sxpr()))
-        eserver.inject('xend.save.begin', self.sxpr())
+        eserver.inject('xend.domain.save',
+                       [self.dominfo.name, self.dominfo.id,
+                        "begin", self.sxpr()])
         xfrd.request(['xfr.save', self.src_dom, vmconfig, self.file ])
         
     def xfr_save_ok(self, xfrd, val):
@@ -361,12 +368,13 @@ class XendSaveInfo(XfrdInfo):
         XfrdInfo.connectionLost(self, reason)
         if self.state =='ok':
             log.info('Save OK: ' + str(self.sxpr()))
-            eserver.inject('xend.save.ok', self.sxpr())
         else:
             self.state = 'error'
             self.error(XendError("save failed"))
             log.info('Save ERROR: ' + str(self.sxpr()))
-            eserver.inject('xend.save.error', self.sxpr())
+        eserver.inject('xend.domain.save',
+                       [ self.dominfo.name, self.dominfo.id,
+                         self.state, self.sxpr() ])
     
 
 class XendMigrate:
@@ -441,27 +449,27 @@ class XendMigrate:
         reactor.connectTCP('localhost', XFRD_PORT, xcf)
         return info.deferred
     
-    def migrate_begin(self, dom, host, port=XFRD_PORT, live=0):
+    def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0):
         """Begin to migrate a domain to another host.
 
-        @param dom:  domain
+        @param dominfo:  domain info
         @param host: destination host
         @param port: destination port
         @return: deferred
         """
         xid = self.nextid()
-        info = XendMigrateInfo(xid, dom, host, port, live)
+        info = XendMigrateInfo(xid, dominfo, host, port, live)
         return self.session_begin(info)
 
-    def save_begin(self, dom, file):
+    def save_begin(self, dominfo, file):
         """Begin saving a domain to file.
 
-        @param dom:  domain
+        @param dominfo:  domain info
         @param file: destination file
         @return: deferred
         """
         xid = self.nextid()
-        info = XendSaveInfo(xid, dom, file)
+        info = XendSaveInfo(xid, dominfo, file)
         return self.session_begin(info)
 
 def instance():